package xyz.zichengdulin.mapper;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import xyz.zichengdulin.pojo.Clazz;
import xyz.zichengdulin.pojo.ClazzQueryParam;

import java.util.List;

@Mapper
public interface ClazzMapper {

    /**
     * 班级信息条件分页查询
     *
     * @param clazzQueryParam
     * @return
     */
    public List<Clazz> list(ClazzQueryParam clazzQueryParam); //使用ClazzQueryParam封装,条件查询条件

    /**
     * 删除班级信息
     *
     * @param id
     */
    void delete(Integer id);

    /**
     * 新增班级信息
     *
     * @param clazz
     */
    //useGeneratedKeys = true 表示启用数据库自动生成的主键值。keyProperty = "id"表示将生成的主键值赋给对象的id属性。
    @Options(useGeneratedKeys = true, keyProperty = "id")
    @Insert("insert into clazz(name,room,begin_date,end_date,master_id,subject,create_time,update_time)" +
            "values(#{name},#{room},#{beginDate},#{endDate},#{masterId},#{subject},#{createTime},#{updateTime})")
    void insert(Clazz clazz);

    /**
     * 查询所有班级信息,将结果映射为Clazz对象列表。
     */
    @Select("select * from clazz ")
    List<Clazz> getInfo();

    /**
     * 根据id查询班级信息
     *
     * @param id
     * @return
     */
    @Select("select * from clazz c where c.id = #{id} ")
    Clazz getInfoById(Integer id);

    /**
     * 修改班级
     * @param clazz
     */
    void update(Clazz clazz);

    /**
     * 根据id查询班级人数
     * @param id
     * @return
     */
    @Select("select count(*) from student where #{id} = student.clazz_id")
    Integer getNumById(Integer id);
}
